// ----------------------------------------------------------
// This Source Code Form is subject to the terms of the
// Mozilla Public License, v.2.0. If a copy of the MPL
// was not distributed with this file, You can obtain one
// at http://mozilla.org/MPL/2.0/.
// ----------------------------------------------------------
// Codebase: https://github.com/ArKuznetsov/cpdb/
// ----------------------------------------------------------

#Использовать "../../core"

#Область СлужебныйПрограммныйИнтерфейс

// Процедура - устанавливает описание команды
//
// Параметры:
//  Команда    - КомандаПриложения     - объект описание команды
//
Процедура ОписаниеКоманды(Команда) Экспорт
	
	Команда.Опция("pp params", "", "Файлы JSON содержащие значения параметров,
	                               | могут быть указаны несколько файлов разделенные "";""")
	       .ТСтрока()
	       .ВОкружении("CPDB_PARAMS");

	Команда.Опция("p path", "", "Путь к локальному каталогу для сохранения загруженных файлов")
	       .ТСтрока()
	       .Обязательный()
	       .ВОкружении("CPDB_SFTP_GET_PATH");
	
	Команда.Опция("f file", "", "путь к файлу на сервере SFTP для загрузки")
	       .ТСтрока()
	       .ВОкружении("CPDB_SFTP_GET_FILE");
	
	Команда.Опция("l list", "", "путь к файлу на сервере SFTP со списком файлов,
	                            |которые будут загружены (параметр -file игнорируется)")
	       .ТСтрока()
	       .ВОкружении("CPDB_SFTP_GET_LIST");
	
	Команда.Опция("ds delsrc", Ложь, "удалить исходные файлы после получения")
	       .Флаговый()
	       .ВОкружении("CPDB_SFTP_GET_DEL_SRC");
	
   КонецПроцедуры // ОписаниеКоманды()

// Процедура - запускает выполнение команды устанавливает описание команды
//
// Параметры:
//  Команда    - КомандаПриложения     - объект  описание команды
//
Процедура ВыполнитьКоманду(Знач Команда) Экспорт

	ЧтениеОпций = Новый ЧтениеОпцийКоманды(Команда);

	ВыводОтладочнойИнформации = ЧтениеОпций.ЗначениеОпции("verbose");

	ПараметрыСистемы.УстановитьРежимОтладки(ВыводОтладочнойИнформации);

	ЭтоСписокФайлов = Истина;
	
	АдресСервера    = ЧтениеОпций.ЗначениеОпции("server");
	Пользователь    = ЧтениеОпций.ЗначениеОпции("user");
	Пароль          = ЧтениеОпций.ЗначениеОпции("pwd");
	ПутьККлючу      = ЧтениеОпций.ЗначениеОпции("key-file");
	ЦелевойПуть     = ЧтениеОпций.ЗначениеОпции("path");

	ПутьНаДиске        = ЧтениеОпций.ЗначениеОпции("list");
	Если НЕ ЗначениеЗаполнено(ПутьНаДиске) Тогда
		ПутьНаДиске = ЧтениеОпций.ЗначениеОпции("file");
		ЭтоСписокФайлов	= Ложь;
	КонецЕсли;

	УдалитьИсточник  = ЧтениеОпций.ЗначениеОпции("delsrc");

	Если ПустаяСтрока(ПутьНаДиске) Тогда
		ВызватьИсключение  "Не задан путь к файлу для получения c сервера SFTP";
	КонецЕсли;

	Клиент = Новый РаботаССерверомSSH(АдресСервера, Пользователь, Пароль, ПутьККлючу);

	ПутьКСкачанномуФайлу = Клиент.ПолучитьФайл(ПутьНаДиске, ЦелевойПуть, УдалитьИсточник);

	ФайлИнфо = Новый Файл(ПутьКСкачанномуФайлу);

	КаталогНаДиске = СтрЗаменить(ПутьНаДиске, ФайлИнфо.Имя, "");

	Если ЭтоСписокФайлов Тогда
		МассивПолучаемыхФайлов = РаботаСФайлами.ПрочитатьСписокФайлов(ПутьКСкачанномуФайлу);
		Для Каждого ПолучаемыйФайл Из МассивПолучаемыхФайлов Цикл
			Клиент.ПолучитьФайл(ОбъединитьПути(КаталогНаДиске, ПолучаемыйФайл),
			                    ОбъединитьПути(ЦелевойПуть, ПолучаемыйФайл),
			                    УдалитьИсточник);
		КонецЦикла;
	КонецЕсли;

КонецПроцедуры // ВыполнитьКоманду()

#КонецОбласти // СлужебныйПрограммныйИнтерфейс
